Chuyển tới nội dung chính

std::vector::operator[]

#include <vector>

      reference operator[] (size_type n);
const_reference operator[] (size_type n) const;

Truy xuất phần tử tại vị trí chỉ định.

Tham số

n

  • Vị trí của phần tử cần truy cập (kiểu size_t).
  • Chỉ nhận một tham số duy nhất là n (vị trí phần tử), phải nằm trong phạm vi hợp lệ [0, size()-1].
  • Không kiểm tra giới hạn (bounds checking): Nếu n vượt ngoài phạm vi hợp lệ, hành vi chương trình là không xác định (undefined behavior).

Giá trị trả về

  • Trả về một tham chiếu (reference) tới phần tử tại vị trí n.
    • Nếu sử dụng trong ngữ cảnh đọc: Trả về tham chiếu hằng (const T&).
    • Nếu sử dụng trong ngữ cảnh ghi: Trả về tham chiếu không hằng (T&).

Đặc điểm

  1. Truy cập trực tiếp phần tử tại chỉ số n.
  2. Chỉ số bắt đầu từ 0 (zero-based indexing).
  3. Có thể sử dụng cả đọc và ghi giá trị.
  4. Truy cập nhanh (O(1)).
  5. Cú pháp ngắn gọn, trực quan.
  6. Không an toàn nếu n vượt quá phạm vi mảng:
    std::vector<int> vec = {10, 20, 30};
    std::cout << vec[10]; // Undefined behavior
  7. Để an toàn hơn, sử dụng phương thức .at(n), phương thức này kiểm tra giới hạn và ném ngoại lệ nếu n không hợp lệ:
    try {
    std::cout << vec.at(10);
    } catch (const std::out_of_range& e) {
    std::cerr << "Lỗi: " << e.what() << '\n';
    }
  8. Dùng [] khi đảm bảo chắc chắn chỉ số nằm trong giới hạn.
  9. Dùng .at() trong các chương trình cần độ an toàn cao, hoặc khi muốn dễ dàng xử lý lỗi.

Ví dụ

Truy cập giá trị (đọc):

#include <iostream>
#include <vector>

int main() {
std::vector<int> vec = {10, 20, 30, 40};
std::cout << "Giá trị tại index 2: " << vec[2] << "\n"; // Output: 30
return 0;
}

Thay đổi giá trị (ghi):

#include <iostream>
#include <vector>

int main() {
std::vector<int> vec = {10, 20, 30, 40};
vec[1] = 99; // Thay đổi giá trị tại index 1
std::cout << "Giá trị mới tại index 1: " << vec[1] << "\n"; // Output: 99
return 0;
}

Các hàm liên quan

atTruy xuất phần tử tại vị trí chỉ định
frontTruy xuất phần tử tại vị trí đầu tiên
backTruy xuất phần tử tại vị trí cuối cùng